home *** CD-ROM | disk | FTP | other *** search
-
- /***** Include vari *****/
-
- #include "ProgED:sources/include/Ped.h"
- #include <string.h>
-
-
-
- /*****
- *
- * FUNZIONE: ULONG SAVEDS ASM main(char *line,char *sectionname)
- *
- * SCOPO: Cerca un riferimento ad una funzione C nella linea puntata
- * da "line". Il nome della funzione viene copiato in
- * "sectionname". Dipendentemente dal modo di scrivere
- * programmi questo scanner puo' fallire nel suo scopo.
- * Ho scritto questo scanner secondo il MIO modo di
- * scrivere funzioni. Se il vostro modo e' diverso dal mio
- * scrivetene uno vostro o migliorate questo.
- *
- * NOTA: Utilizza SEMPRE la funzione geta4() o la direttiva __saveds!
- *
- * RESTITUISCE: Lunghezza della stringa copiata in "sectionname".
- * 0=riferimento non trovato.
- *
- ****/
-
- ULONG SAVEDS ASM main(RG(a0) char *line,RG(a1) char *sectionname)
- {
- char *p,
- *q,
- *d,
- *r;
- int i,
- n1,
- n2;
-
-
-
-
- /***** Se la linea inizia per 'static ' saltalo *****/
- if ((line[0]=='s')||(line[0]=='S'))
- if ((line[1]=='t')||(line[1]=='T'))
- if ((line[2]=='a')||(line[2]=='A'))
- if ((line[3]=='t')||(line[3]=='T'))
- if ((line[4]=='i')||(line[4]=='I'))
- if ((line[5]=='c')||(line[5]=='C'))
- if ((line[6]==32)||(line[6]==9))
- line+=7;
-
- /***** Se la linea inizia per 'struct ' saltalo *****/
- if (line[0]=='s')
- if (line[1]=='t')
- if (line[2]=='r')
- if (line[3]=='u')
- if (line[4]=='c')
- if (line[5]=='t')
- if (line[6]==32)
- line+=7;
-
- /***** Controlla che sulla linea ci siano UNA '(' ed UNA ')' *****/
- p=line;
- n1=n2=0;
- while(*p)
- {
- if (*p=='(') n1++;
- if (*p==')')
- {
- r=p+1;
- n2++;
- }
- p++;
- }
-
- /****** Se c'e' una '(' ma nessuna ')' forse la definizione e' su piu' linee
- in tal caso controlla che la linea finisca per ','! *****/
- if ((n1==1)&&(!n2))
- {
- if (line[strlen(line)-1]==',')
- {
- r=line+strlen(line);
- n2=1;
- }
- }
-
- /****** Continua solo se c'era solo una '(' ed una ')' *****/
- if ((n1!=1)||(n2!=1)) return(0);
-
- /***** In caso positivo -> controlla che la ')' non sia seguita da altro (al massimo ';') *****/
- p=r;
- while(*p)
- {
- if ((*p!=32)&&(*p!=9)&&(*p!=';')) break;
- p++;
- }
-
- if (*p) return(0);
-
- /****** OK! Controlla che la linea sia del tipo xxxx xxxx(.... *****/
- q=p=line;
- n1=0;
- while(*p)
- {
- if ((*p==32)||(*p==9))
- {
- q=p+1;
- n1++;
- }
-
- if (*p=='(') break;
-
- p++;
- }
-
- if (n1>1) return(0);
-
- if (n1==1) if (q==line+1) return(0);
-
- /***** Se il tipo di ritorno e' un puntatore elimina l'asterisco *****/
- if (*q=='*') q++;
-
- /***** Copia il nome e ritorna *****/
- d=sectionname;
- for(i=0;i<p-q;i++) *d++=q[i];
- *d='\0';
- return(p-q);
- }
-
-